package org.shock.ss.sms.commons.excel;

import org.apache.poi.hssf.usermodel.DVConstraint;
import org.apache.poi.hssf.usermodel.HSSFDataValidation;
import org.apache.poi.hssf.util.CellRangeAddressList;

/**
 * @作者 王博海
 * @时间：2010-09-06
 * @功能：给excel中单元格添加限制约束条件的工具类
 *
 */
public class ExcelConstraint {

	/**
		 * 对excel添加整型数字约束
		 * @param beginRowindex（开始行）beginColindex（开始列）endRowindex（结束行）endColindex（结束列）
		 * beginIntData （最大值）endIntData（最小值）errorTitle(错误信息标题) errorMessage（错误信息）
		 * @return（返回HSSFDataValidation对象）
		 */
	public HSSFDataValidation addDataValidationInt(int beginRowindex, short beginColindex,
			int endRowindex, short endColindex, String beginIntData,
			String endIntData,String errorTitle,String errorMessage) {

		DVConstraint constraint = DataValidationUtil.getIntDVConstraintBetween(
				beginIntData, endIntData);
		// 设置数据有效性加载在哪个单元格上。
		// 四个参数分别是：起始行、终止行、起始列、终止列
		CellRangeAddressList regions = new CellRangeAddressList(beginRowindex,
				endRowindex, beginColindex, endColindex);

		// 数据有效性对象
		HSSFDataValidation data_validation = new HSSFDataValidation(regions,
				constraint);
		data_validation.createErrorBox(errorTitle,errorMessage);

		return data_validation;
	}

	
	/**
	 * 对excel添加字符串约束
	 * @param beginRowindex（开始行）beginColindex（开始列）endRowindex（结束行）endColindex（结束列）
	 * strArray（字符串数组）errorTitle(错误信息标题) errorMessage（错误信息）
	 * @return（返回HSSFDataValidation对象）
	 */
	 
	public HSSFDataValidation addDataValidationString(int beginRowindex, short beginColindex,
				int endRowindex, short endColindex, String[] strArray,String errorTitle,String errorMessage) {

			DVConstraint constraint = DataValidationUtil
					.getListDVConstraint(strArray);
			// 设置数据有效性加载在哪个单元格上。
			// 四个参数分别是：起始行、终止行、起始列、终止列
			CellRangeAddressList regions = new CellRangeAddressList(beginRowindex,
					endRowindex, beginColindex, endColindex);

			// 数据有效性对象
			HSSFDataValidation data_validation = new HSSFDataValidation(regions,
					constraint);
			data_validation.createErrorBox(errorTitle,errorMessage);

			return data_validation;
		}


	/**
	 * 对excel添加时间约束
	 * @param beginRowindex（开始行）beginColindex（开始列）endRowindex（结束行）endColindex（结束列）
	 * beginIntData （最大值）endIntData（最小值）dateFormat(日期的格式) errorTitle(错误信息标题) errorMessage（错误信息）
	 * @return（返回HSSFDataValidation对象）
	 */
		public HSSFDataValidation addDataValidationDate(int beginRowindex, short beginColindex,
				int endRowindex, short endColindex, String beginDate,
				String endDate, String dateFormat,String errorTitle,String errorMessage) {

			DVConstraint constraint = DataValidationUtil
					.getDateDVConstraintBetween(beginDate, endDate, dateFormat);
			// 设置数据有效性加载在哪个单元格上。
			// 四个参数分别是：起始行、终止行、起始列、终止列
			CellRangeAddressList regions = new CellRangeAddressList(beginRowindex,
					endRowindex, beginColindex, endColindex);

			// 数据有效性对象
			HSSFDataValidation data_validation = new HSSFDataValidation(regions,
					constraint);
			
			data_validation.createErrorBox(errorTitle,errorMessage);
			
			return data_validation;
		}

		/**
		 * 对excel添加带小数位数的数字约束
		 * @param beginRowindex（开始行）beginColindex（开始列）endRowindex（结束行）endColindex（结束列）
		 * beginIntData （最大值）endIntData（最小值）errorTitle(错误信息标题) errorMessage（错误信息）
		 * @return（返回HSSFDataValidation对象）
		 */
		public HSSFDataValidation addDataValidationDecimal(int beginRowindex,
				short beginColindex, int endRowindex, short endColindex,
				String beginDecimalData, String endDecimalData,String errorTitle,String errorMessage) {

			DVConstraint constraint = DataValidationUtil
					.getDecimalDVConstraintBetween(beginDecimalData, endDecimalData);
			// 设置数据有效性加载在哪个单元格上。
			// 四个参数分别是：起始行、终止行、起始列、终止列
			CellRangeAddressList regions = new CellRangeAddressList(beginRowindex,
					endRowindex, beginColindex, endColindex);

			// 数据有效性对象
			HSSFDataValidation data_validation = new HSSFDataValidation(regions,
					constraint);
			data_validation.createErrorBox(errorTitle,errorMessage);

			return data_validation;
		}

	 
}
